From 122db7141d292d63cfbe2c7d7a4280cc73194ece Mon Sep 17 00:00:00 2001
From: Xavier Leroy <xavierleroy@users.noreply.github.com>
Date: Wed, 5 Aug 2020 11:17:52 +0200
Subject: [PATCH 5/5] Fix type mismatches between definition and declaration
 (#9830)

The C global variable caml_fl_merge and the C function
caml_spacetime_my_profinfo (bytecode version) were declared and
defined with different types.  This is undefined behavior and
can cause link-time errors with link-time optimization (LTO).

Closes: #9825
---
 runtime/major_gc.c      | 4 ++--
 runtime/spacetime_byt.c | 7 ++++++-
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/runtime/major_gc.c b/runtime/major_gc.c
index 5e4f06bce..c8f5a3281 100644
--- a/runtime/major_gc.c
+++ b/runtime/major_gc.c
@@ -63,7 +63,7 @@ uintnat caml_dependent_size, caml_dependent_allocated;
 double caml_extra_heap_resources;
 uintnat caml_fl_wsz_at_phase_change = 0;
 
-extern char *caml_fl_merge;  /* Defined in freelist.c. */
+extern value caml_fl_merge;  /* Defined in freelist.c. */
 
 static char *markhp, *chunk, *limit;
 static double p_backlog = 0.0; /* backlog for the gc speedup parameter */
@@ -570,7 +570,7 @@ static void sweep_slice (intnat work)
         break;
       case Caml_blue:
         /* Only the blocks of the free-list are blue.  See [freelist.c]. */
-        caml_fl_merge = Bp_hp (hp);
+        caml_fl_merge = (value) Bp_hp (hp);
         break;
       default:          /* gray or black */
         CAMLassert (Color_hd (hd) == Caml_black);
diff --git a/runtime/spacetime_byt.c b/runtime/spacetime_byt.c
index 2b0bf1dc2..b75fb0980 100644
--- a/runtime/spacetime_byt.c
+++ b/runtime/spacetime_byt.c
@@ -12,8 +12,12 @@
 /*                                                                        */
 /**************************************************************************/
 
+#define CAML_INTERNALS
+
 #include "caml/fail.h"
 #include "caml/mlvalues.h"
+#include "caml/io.h"
+#include "caml/spacetime.h"
 
 int caml_ensure_spacetime_dot_o_is_included = 42;
 
@@ -22,7 +26,8 @@ CAMLprim value caml_spacetime_only_works_for_native_code(value foo, ...)
   caml_failwith("Spacetime profiling only works for native code");
 }
 
-uintnat caml_spacetime_my_profinfo (void)
+uintnat caml_spacetime_my_profinfo (spacetime_unwind_info_cache * cached,
+                                    uintnat wosize)
 {
   return 0;
 }
-- 
2.28.0.rc2

